🍀 Hội quán võ lâm, 24/9/2023
💡 Tác giả: Julian Vương
✍️ Soạn giả: Huy Nguyễn
Khái niệm clean code, không nhớ đã đọc ở đâu rồi. Biết thì đơn giản, nhưng thực hành thì khá phức tạp. Dưới đây là một số trick mình tổng hợp theo kinh nghiệm cá nhân
Thay vì tạo ra những câu lệnh trùng lặp thì gói nó vào 1 vòng lặp. Nếu nắm bắt tốt quy luật thì việc dùng vòng lặp cũng không phức tạp lắm.
Thay vì dùng:
if <điều kiện> then <do somethine> else <do else-thing> end
thì dùng shorten if-else:
<điều kiên> and <if true> or <if false>
Ví dụ: muốn kiểm tra nếu là dòng chẵn thì cho màu violet còn dòng lẻ thì cho màu pink, thay vì ta dùng
local szColor
if mod(nLine,2) == 0 then szColor = "violet" else szColor = "pink" end
thì dùng thẳng như sau:
local szColor = mod(nLine, 2) == 0 and "violet" or "pink"
Ví dụ:
local szSeries = function(num)
return format("<color=%s>%s<color>", tbSeries[num][2], tbSeries[num][1])
end
dòng code trên sẽ trả về 1 string có dạng <color=(màu theo ngũ hành)>(tên ngũ hành)>
Thay vì gọi cùng 1 hàm giống nhau để làm các công việc khác nhau, thì tập trung chúng lại 1 table. Sự khác biệt duy nhất của chúng là các Hàm sẽ được gọi nếu chọn.
Ví du: Add điểm kinh nghiệm thì dùng hàm AddOwnExp, add tiềm năng thì dùng AddProp,… Tất cả các điểm điều có các thuộc tính gần giống nhau, chỉ khác ở con số nhập vào tối đa (nLimit), đơn vị tính (szUnit) và hàm sẽ sử dụng (pFun).
Vì vậy ta có thể tập trung chúng lại vào 1 table và sử dụng 1 -> 2 function duy nhất để áp dụng khi người chơi lựa chọn
Mỗi khi sử dụng CreateNewSayEx, Say, CreateTaskSay để hiện bảng dialog cho người chơi lựa chọn. Thì hầu như đều phải thêm 2 lựa chọn là Trở lại và Kết thúc đối thoại.
Nếu có thể rút ngắn được 2 dòng này, thì mỗi dialog rút ngắn được 2 dòng, và toàn bộ code sẽ rút ngắn được khá nhiều dòng. Hơn thế nữa code trông có vẻ sạch hơn 🤣
Hình 5 chỉ là ví dụ tôi tự viết 1 function để làm việc này. Mới chia sẻ lần đầu còn thiếu nhiều kinh nghiệm, mong ae bỏ quá cho
Tham gia trao đổi thêm tại bài viết gốc https://fb.com/groups/volamquan/posts/1248330749209448/
Ly Mai: cái số 2 shorthand if else kia đọc code đau não quá bạn ạ. Không nên viết tát kiểu ấy. Viết tường mình ra cho dễ hiểu, dễ debug. C chạy nhanh mà sao phải ‘khổ d*m’ thế?.
Huy Nguyen: Theo mình nếu mệnh đề else chỉ có duy nhất một lô gích thì có thể xài toán tử 3 ngôi như cách được trình bày trong kinh nghiệm số 2 ở trên. Nhiều hơn 2 mệnh đề else nên viết tường minh rõ ràng ra.
local szColor = mod(nLine, 2) == 0 and "violet" or "pink"
cũng tương đương với code C++
string szColor = nLine % 2 == 0 ? "violet" : "pink";
Nếu b viết đủ nhiều, khi quen mắt thì đọc cũng không khó hiểu mấy. Tuy nhiên, nếu bạn vẫn thấy rối, có một cách khác là viết hàm hỗ trợ cho cấu trúc trên như sau: ```lua function iff(logic, true_value, false_value) return logic and true_value or false_value; end
local szColor = iff(nLine % 2 == 0, “violet”, “pink”). ````
Bản quyền phân phối nội dung thuộc về Hội quán võ lâm. Quyền tác giả thuộc về người đã sáng tạo nội dung được thể hiện rõ trong bài viết.
Mọi hình thức sao chép phân phối lại yêu cầu giữ nguyên toàn bộ bài viết bao gồm cả tiêu đề, nội dung và hình thức. Không được phép chỉnh sửa, thay đổi các liên kết dẫn về Hội quán võ lâm, cũng như thông tin về tác giả.
Các vấn đề tác quyền liên hệ: jx1offline@gmail.com